// Copyright 2023 Linkall Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package authorization

import (
	metapb "github.com/vanus-labs/vanus/api/meta"

	vanus "github.com/vanus-labs/vanus/api/vsr"
)

type UserRole struct {
	UserIdentifier string
	ResourceID     vanus.ID
	ResourceKind   ResourceKind
	Role           Role
	RoleID         string
	BuiltIn        bool
}

func FromPbUserRole(from *metapb.UserRole) *UserRole {
	to := &UserRole{
		UserIdentifier: from.UserIdentifier,
		Role:           Role(from.RoleName),
		ResourceKind:   ResourceKind(from.ResourceKind),
		ResourceID:     vanus.NewIDFromUint64(from.ResourceId),
		BuiltIn:        from.BuiltIn,
	}
	return to
}

func (ur *UserRole) IsClusterAdmin() bool {
	return ur.Role == RoleClusterAdmin
}
